Riverside County Project - Demographic Data for Riverside County
Map 1: poverty rate
#install all required packages
library(gmapsdistance)
library(choroplethr)
## Loading required package: acs
## Loading required package: stringr
## Loading required package: XML
##
## Attaching package: 'acs'
## The following object is masked from 'package:base':
##
## apply
library(choroplethrMaps)
library(rvest)
## Loading required package: xml2
##
## Attaching package: 'rvest'
## The following object is masked from 'package:XML':
##
## xml
library(tidyverse)
## ── Attaching packages ────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 2.2.1 ✔ readr 1.1.1
## ✔ tibble 1.4.2 ✔ purrr 0.2.4
## ✔ tidyr 0.8.0 ✔ dplyr 0.7.4
## ✔ ggplot2 2.2.1 ✔ forcats 0.3.0
## ── Conflicts ───────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::combine() masks acs::combine()
## ✖ dplyr::filter() masks stats::filter()
## ✖ readr::guess_encoding() masks rvest::guess_encoding()
## ✖ dplyr::lag() masks stats::lag()
## ✖ purrr::pluck() masks rvest::pluck()
## ✖ rvest::xml() masks XML::xml()
library(ggplot2)
library(ggmap)
library(readxl)
library(mapview)
library(leaflet)
##
## Attaching package: 'leaflet'
## The following object is masked from 'package:mapview':
##
## addMapPane
library(htmlwidgets)
library(rgdal)
## Loading required package: sp
## rgdal: version: 1.2-18, (SVN revision 718)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 2.1.3, released 2017/20/01
## Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/3.4/Resources/library/sf/gdal
## GDAL binary built with GEOS: FALSE
## Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
## Path to PROJ.4 shared files: /Library/Frameworks/R.framework/Versions/3.4/Resources/library/sf/proj
## Linking to sp version: 1.2-7
#install.packages("gpclib")
library(gpclib)
## General Polygon Clipper Library for R (version 1.5-5)
## Type 'class ? gpc.poly' for help
library(maptools)
## Checking rgeos availability: FALSE
## Note: when rgeos is not available, polygon geometry computations in maptools depend on gpclib,
## which has a restricted licence. It is disabled by default;
## to enable gpclib, type gpclibPermit()
#install.packages("maptools")
#read in shapefile
setwd ("~/Dropbox/ucr/2018spring/POSC207/shapefiles")
demo_tract_16 <- readOGR("~/Dropbox/ucr/2018spring/POSC207/shapefiles",
"demographic_census_2016")
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/sunnyshao/Dropbox/ucr/2018spring/POSC207/shapefiles", layer: "demographic_census_2016"
## with 453 features
## It has 61 fields
## Integer64 fields read as strings: ALAND AWATER demo_AREAW demo_tot_p demo_age_c demo_age_1 demo_age_2 demo_age_3 demo_black demo_AIAN demo_asian demo_nhpi demo_other demo_two_o demo_white demo_media demo_latin demo_less_ demo_hs demo_some_ demo_ba_hi de_pov_you de_pov_sen de_pov_blk de_pov_ain de_pov_aa de_pov_nhp de_pov_la de_pov_nhw de_pov_all
#turn geoid (census tract fipscode) into character
demo_tract_16$GEOID <- as.character(demo_tract_16$GEOID)
#extract only the shape of the shapefile
if (!require(gpclib)) install.packages("gpclib", type="source")
gpclibPermit()
## Warning in gpclibPermit(): support for gpclib will be withdrawn from
## maptools at the next major release
## [1] TRUE
points <- fortify(demo_tract_16, region = 'GEOID')
#getting riverside county google map
riverside <- qmap("Thermal, CA", zoom=8)
## Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=Thermal,+CA&zoom=8&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Thermal,%20CA&sensor=false
## Warning: `panel.margin` is deprecated. Please use `panel.spacing` property
## instead
#extracting data from the shapefile
data <- as.data.frame(demo_tract_16)
data <- data %>% select(GEOID, pct_pov_al)
#rename the variable for better map labelling
data <- plyr::rename(data, c("pct_pov_al" = "poverty rate"))
#merge the data back into the shape file
points2 <- merge(points, data, by.x='id', by.y='GEOID', all.x=TRUE)
#version 1: one color heat map
riverside + geom_polygon(aes(x=long,y=lat, group=group, fill=`poverty rate`, alpha=0.9),
data=points2, color='black', size = 0.1) +
scale_fill_gradient(low='white', high='red')
# version 2: two-color style
riverside + geom_polygon(aes(x=long,y=lat, group=group, fill=`poverty rate` , alpha=0.9),
data=points2, color='black', size = 0.1) +
scale_fill_distiller(palette='Spectral') +
scale_alpha(range=c(0.5,0.5), guide = 'none') #hide legend for transparency setting
#web mapping
pal_fun <- colorQuantile("YlOrRd", NULL, n = 5)
p_popup <- paste0("<strong>Poverty Rate: </strong>", demo_tract_16$pct_pov_al)
leaflet(demo_tract_16) %>%
addPolygons(
stroke = FALSE, # remove polygon borders
fillColor = ~pal_fun(pct_pov_al), # set fill color with function from above and value
fillOpacity = 0.6, smoothFactor = 0.5, # make it nicer
popup = p_popup) %>% # add popup
addProviderTiles("CartoDB.Positron") %>%
addLegend("bottomright", # location
pal=pal_fun, # palette function
values=~pct_pov_al, # value to be passed to palette function
title = 'Overall Percent Poverty Rate') # legend title
Map 2: Trying to map another outcome (percent BA or higher)
#read in shapefile
demo_tract_16 <- readOGR("~/Dropbox/ucr/2018spring/POSC207/shapefiles",
"demographic_census_2016")
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/sunnyshao/Dropbox/ucr/2018spring/POSC207/shapefiles", layer: "demographic_census_2016"
## with 453 features
## It has 61 fields
## Integer64 fields read as strings: ALAND AWATER demo_AREAW demo_tot_p demo_age_c demo_age_1 demo_age_2 demo_age_3 demo_black demo_AIAN demo_asian demo_nhpi demo_other demo_two_o demo_white demo_media demo_latin demo_less_ demo_hs demo_some_ demo_ba_hi de_pov_you de_pov_sen de_pov_blk de_pov_ain de_pov_aa de_pov_nhp de_pov_la de_pov_nhw de_pov_all
#turn geoid (census tract fipscode) into character
demo_tract_16$GEOID <- as.character(demo_tract_16$GEOID)
#extract only the shape of the shapefile
if (!require(gpclib)) install.packages("gpclib", type="source")
gpclibPermit()
## Warning in gpclibPermit(): support for gpclib will be withdrawn from
## maptools at the next major release
## [1] TRUE
points <- fortify(demo_tract_16, region = 'GEOID')
#getting riverside county google map
riverside <- qmap("Thermal, CA", zoom=8)
## Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=Thermal,+CA&zoom=8&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Thermal,%20CA&sensor=false
## Warning: `panel.margin` is deprecated. Please use `panel.spacing` property
## instead
#extracting data from the shapefile
data <- as.data.frame(demo_tract_16)
data <- data %>% select(GEOID, pct_ba_hi)
#rename the variable for better map labelling
data <- plyr::rename(data, c("pct_ba_hi" = "Percent BA Degree or Higher"))
#merge the data back into the shape file
points2 <- merge(points, data, by.x='id', by.y='GEOID', all.x=TRUE)
#version 1: one color heat map
riverside + geom_polygon(aes(x=long,y=lat, group=group, fill=`Percent BA Degree or Higher`, alpha=0.9),
data=points2, color='black', size = 0.1) +
scale_fill_gradient(low='white', high='red')
# version 2: two-color style
riverside + geom_polygon(aes(x=long,y=lat, group=group, fill=`Percent BA Degree or Higher`, alpha=0.9),
data=points2, color='black', size = 0.1) +
scale_fill_distiller(palette='Spectral') +
scale_alpha(range=c(0.6,0.6), guide = 'none') #hide legend for transparency setting
pal_fun <- colorQuantile("YlOrRd", NULL, n = 5)
p_popup <- paste0("<strong>Poverty Rate: </strong>", demo_tract_16$pct_ba_hi)
leaflet(demo_tract_16) %>%
addPolygons(
stroke = FALSE, # remove polygon borders
fillColor = ~pal_fun(pct_ba_hi), # set fill color with function from above and value
fillOpacity = 0.6, smoothFactor = 0.5, # make it nicer
popup = p_popup) %>% # add popup
addProviderTiles("CartoDB.Positron") %>%
addLegend("bottomright", # location
pal=pal_fun, # palette function
values=~pct_ba_hi, # value to be passed to palette function
title = 'Share of total population that has BA degree or higher') # legend title